home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume15 / dmake-3.6 / part16 < prev    next >
Encoding:
Text File  |  1990-10-14  |  38.9 KB  |  1,063 lines

  1. Newsgroups: comp.sources.misc
  2. X-UNIX-From: dvadura@watdragon.waterloo.edu
  3. subject: v15i068: dmake version 3.6 (part 16/25)
  4. from: Dennis Vadura <dvadura@watdragon.waterloo.edu>
  5. Sender: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  6.  
  7. Posting-number: Volume 15, Issue 68
  8. Submitted-by: Dennis Vadura <dvadura@watdragon.waterloo.edu>
  9. Archive-name: dmake-3.6/part16
  10.  
  11. #!/bin/sh
  12. # this is part 16 of a multipart archive
  13. # do not concatenate these parts, unpack them in order with /bin/sh
  14. # file man/dmake.nc continued
  15. #
  16. CurArch=16
  17. if test ! -r s2_seq_.tmp
  18. then echo "Please unpack part 1 first!"
  19.      exit 1; fi
  20. ( read Scheck
  21.   if test "$Scheck" != $CurArch
  22.   then echo "Please unpack part $Scheck next!"
  23.        exit 1;
  24.   else exit 0; fi
  25. ) < s2_seq_.tmp || exit 1
  26. echo "x - Continuing file man/dmake.nc"
  27. sed 's/^X//' << 'SHAR_EOF' >> man/dmake.nc
  28. X          re-read by dmake)
  29. X
  30. X     -P#  On systems that support multi-processing cause dmake to
  31. X          use # concurrent child processes to make targets.  See
  32. X          the "MULTI PROCESSING" section for more information.
  33. X
  34. X     -q   Check and see if the target is up to date.  Exits with
  35. X          code 0 if up to date, 1 otherwise.
  36. X
  37. X     -r   Tells dmake not to read the initial startup makefile,
  38. X          see STARTUP section for more details.
  39. X
  40. X     -s   Tells dmake to do all its work silently and not echo
  41. X          the commands it is executing to stdout (also suppresses
  42. X          warnings).  This  is equivalent to the .SILENT attri-
  43. X          bute or macro.
  44. X
  45. X
  46. X
  47. X
  48. X
  49. XVersion 3.50                    UW                              2
  50. X
  51. X
  52. X
  53. X
  54. XDMAKE(p)               Unsupported Software               DMAKE(p)
  55. X
  56. X
  57. X
  58. X     -S   Force sequential execution of recipes on architectures
  59. X          which support concurrent makes.  For backward compati-
  60. X          bility with old makefiles that have nasty side-effect
  61. X          prerequisite dependencies.
  62. X
  63. X     -t   Causes dmake to touch the targets and bring them up to
  64. X          date without executing any commands.
  65. X
  66. X     -T   Tells dmake to not perform transitive closure on the
  67. X          inference graph.
  68. X
  69. X     -u   Force an unconditional update.  (ie. do everything that
  70. X          would be done if everything that a target depended on
  71. X          was out of date)
  72. X
  73. X     -v   Verbose flag, when making targets print to stdout what
  74. X          we are going to make and what we think it's timestamp
  75. X          is.
  76. X
  77. X     -V   Print the version of dmake, and values of builtin mac-
  78. X          ros.
  79. X
  80. X     -x   Upon processing the user makefile export all non-
  81. X          internally defined macros to the user's environment.
  82. X          This option together with the -e option allows SYSV
  83. X          AUGMAKE recursive makes to function as expected.
  84. X
  85. XINDEX
  86. X     Here is a list of the sections that follow and a short
  87. X     description of each.  Perhaps you won't have to read the
  88. X     whole man page to find what you need.
  89. X
  90. X     STARTUP            Describes dmake initialization.
  91. X
  92. X     SYNTAX             Describes the syntax of makefile expres-
  93. X                        sions.
  94. X
  95. X     ATTRIBUTES         Describes the notion of attributes and
  96. X                        how they are used when making targets.
  97. X
  98. X     MACROS             Defining and expanding macros.
  99. X
  100. X     RULES AND TARGETS  How to define targets and their prere-
  101. X                        quisites.
  102. X
  103. X     RECIPES            How to tell dmake how to make a target.
  104. X
  105. X     TEXT DIVERSIONS    How to use text diversions in recipes and
  106. X                        macro expansions.
  107. X
  108. X     SPECIAL TARGETS    Some targets are special.
  109. X
  110. X
  111. X
  112. X
  113. XVersion 3.50                    UW                              3
  114. X
  115. X
  116. X
  117. X
  118. XDMAKE(p)               Unsupported Software               DMAKE(p)
  119. X
  120. X
  121. X
  122. X     SPECIAL MACROS     Macros used by dmake to alter the pro-
  123. X                        cessing of the makefile, and those
  124. X                        defined by dmake for the user.
  125. X
  126. X     CONTROL MACROS     Itemized list of special control macros.
  127. X
  128. X     RUN-TIME MACROS    Discussion of special run-time macros
  129. X                        such as $@ and $<.
  130. X
  131. X     FUNCTION MACROS    GNU style function macros, only $(mktmp
  132. X                        ...) for now.
  133. X
  134. X     DYNAMIC PREREQUISITES
  135. X                        Processing of prerequisites which contain
  136. X                        macro expansions in their name.
  137. X
  138. X     BINDING TARGETS    The rules that dmake uses to bind a tar-
  139. X                        get to an existing file in the file sys-
  140. X                        tem.
  141. X
  142. X     PERCENT(%) RULES   Specification of recipes to be used by
  143. X                        the inference algorithm.
  144. X
  145. X     MAKING INFERENCES  The rules that dmake uses when inferring
  146. X                        how to make a target which has no expli-
  147. X                        cit recipe.  This and the previous sec-
  148. X                        tion are really a single section in the
  149. X                        text.
  150. X
  151. X     MAKING TARGETS     How dmake makes targets other than
  152. X                        libraries.
  153. X
  154. X     MAKING LIBRARIES   How dmake makes libraries.
  155. X
  156. X     MULTI PROCESSING   Discussion of dmake's parallel make
  157. X                        facilities for architectures that support
  158. X                        them.
  159. X
  160. X     CONDITIONALS       Conditional expressions which control the
  161. X                        processing of the makefile.
  162. X
  163. X     EXAMPLES           Some hopefully useful examples.
  164. X
  165. X     COMPATIBILITY      How dmake compares with previous versions
  166. X                        of make.
  167. X
  168. X     LIMITS             Limitations of dmake.
  169. X
  170. X     PORTABILITY        Comments on writing portable makefiles.
  171. X
  172. X     FILES              Files used by dmake.
  173. X
  174. X
  175. X
  176. X
  177. XVersion 3.50                    UW                              4
  178. X
  179. X
  180. X
  181. X
  182. XDMAKE(p)               Unsupported Software               DMAKE(p)
  183. X
  184. X
  185. X
  186. X     SEE ALSO           Other related programs, and man pages.
  187. X
  188. X     AUTHOR             The guy responsible for this thing.
  189. X
  190. X     BUGS               Hope not.
  191. X
  192. XSTARTUP
  193. X     When dmake begins execution it first processes the command
  194. X     line and then processes an initial startup-makefile.  This
  195. X     is followed by an attempt to locate and process a user sup-
  196. X     plied makefile.  The startup file defines the default values
  197. X     of all required control macros and the set of default rules
  198. X     for making inferences.  When searching for the startup
  199. X     makefile, dmake searches the following locations, in order,
  200. X     until a startup file is located:
  201. X
  202. X          1.   The location given as the value of the macro MAK-
  203. X               ESTARTUP defined on the command line.
  204. X
  205. X          2.   The location given as the value of the environment
  206. X               variable MAKESTARTUP defined in the current
  207. X               environment.
  208. X
  209. X          3.   The location given as the value of the macro MAK-
  210. X               ESTARTUP defined internally within dmake.
  211. X
  212. X     The above search is disabled by specifying the -r option on
  213. X     the command line.  An error is issued if a startup makefile
  214. X     cannot be found and the -r option was not specified.  A user
  215. X     may substitute a custom startup file by defining the MAKES-
  216. X     TARTUP environment variable or by redefining the MAKESTARTUP
  217. X     macro on the command line.  To determine where dmake looks
  218. X     for the default startup file, check your environment or
  219. X     issue the command "dmake -V".
  220. X
  221. X     A similar search is performed to locate a default user
  222. X     makefile when no -f command line option is specified.  The
  223. X     special target .MAKEFILES is defined by default.  This
  224. X     target's prerequisite list specifies the names of files and
  225. X     the order that dmake will use to search for them when
  226. X     attempting to locate the default makefile.  A typical defin-
  227. X     ition for this target is:
  228. X
  229. X          .MAKEFILES : makefile.mk Makefile makefile
  230. X
  231. X     dmake will first look for makefile.mk and then the others.
  232. X     If a prerequisite cannot be found dmake will try to make it
  233. X     before going on to the next prerequisite.  For example,
  234. X     makefile.mk can be checked out of an RCS file if the proper
  235. X     rules for doing so are defined in the startup file.
  236. X
  237. X
  238. X
  239. X
  240. X
  241. XVersion 3.50                    UW                              5
  242. X
  243. X
  244. X
  245. X
  246. XDMAKE(p)               Unsupported Software               DMAKE(p)
  247. X
  248. X
  249. X
  250. XSYNTAX
  251. X     This section is a summary of the syntax of makefile state-
  252. X     ments.  The description is given in a style similar to BNF,
  253. X     where { } enclose items that may appear zero or more times,
  254. X     and [ ] enclose items that are optional.  Alternative pro-
  255. X     ductions for a left hand side are indicated by '->', and
  256. X     newlines are significant.  All symbols in bold type are text
  257. X     or names representing text supplied by the user.
  258. X
  259. X
  260. X
  261. X          Makefile -> { Statement }
  262. X
  263. X          Statement -> Macro-Definition
  264. X                    -> Conditional
  265. X                    -> Rule-Definition
  266. X                    -> Attribute-Definition
  267. X
  268. X          Macro-Definition -> MACRO = LINE
  269. X                           -> MACRO *= LINE
  270. X                           -> MACRO := LINE
  271. X                           -> MACRO *:= LINE
  272. X                           -> MACRO += LINE
  273. X                           -> MACRO +:= LINE
  274. X
  275. X          Conditional ->  .IF expression
  276. X                             Makefile
  277. X                          [ .ELSE
  278. X                             Makefile ]
  279. X                          .END
  280. X
  281. X          expression -> LINE
  282. X                     -> STRING == LINE
  283. X                     -> STRING != LINE
  284. X
  285. X
  286. X          Rule-Definition ->  target-definition
  287. X                                 [ recipe ]
  288. X
  289. X          target-definition -> targets [attrs] op { PREREQUISITE } [; rcp-line]
  290. X
  291. X          targets -> target { targets }
  292. X                  -> "target" { targets }
  293. X
  294. X          target -> special-target
  295. X                 -> TARGET
  296. X
  297. X          attrs -> attribute { attrs }
  298. X                -> "attribute" { attrs }
  299. X
  300. X          op -> : { modifier }
  301. X
  302. X
  303. X
  304. X
  305. XVersion 3.50                    UW                              6
  306. X
  307. X
  308. X
  309. X
  310. XDMAKE(p)               Unsupported Software               DMAKE(p)
  311. X
  312. X
  313. X
  314. X          modifier -> :
  315. X                   -> ^
  316. X                   -> !
  317. X                   -> -
  318. X
  319. X          recipe -> { TAB rcp-line }
  320. X                 -> [@][%][-] [
  321. X                       { LINE }
  322. X                    ]
  323. X
  324. X          rcp-line -> [@][%][-][+] LINE
  325. X
  326. X
  327. X          Attribute-Definition -> attrs : targets
  328. X
  329. X
  330. X          attribute -> .EPILOG
  331. X                    -> .IGNORE
  332. X                    -> .LIBRARY
  333. X                    -> .MKSARGS
  334. X                    -> .NOINFER
  335. X                    -> .PRECIOUS
  336. X                    -> .PROLOG
  337. X                    -> .SETDIR=path
  338. X                    -> .SILENT
  339. X                    -> .SEQUENTIAL
  340. X                    -> .SWAP
  341. X                    -> .USESHELL
  342. X                    -> .SYMBOL
  343. X                    -> .UPDATEALL
  344. X
  345. X          special-target -> .ERROR
  346. X                         -> .EXPORT
  347. X                         -> .GROUPEPILOG
  348. X                         -> .GROUPPROLOG
  349. X                         -> .IMPORT
  350. X                         -> .INCLUDE
  351. X                         -> .INCLUDEDIRS
  352. X                         -> .MAKEFILES
  353. X                         -> .REMOVE
  354. X                         -> .SOURCE
  355. X                         -> .SOURCE.suffix
  356. X                         -> .suffix1.suffix2
  357. X
  358. X
  359. X     Where, TAB represents a <tab> character, STRING represents
  360. X     an arbitrary sequence of characters, and LINE represents a
  361. X     possibly empty sequence of characters terminated by a non-
  362. X     escaped (not immediately preceded by a backslash '\') new-
  363. X     line character.  MACRO, PREREQUISITE, and TARGET each
  364. X     represent a string of characters not including space or tab
  365. X     which respectively form the name of a macro, prerequisite or
  366. X
  367. X
  368. X
  369. XVersion 3.50                    UW                              7
  370. X
  371. X
  372. X
  373. X
  374. XDMAKE(p)               Unsupported Software               DMAKE(p)
  375. X
  376. X
  377. X
  378. X     target.  The name may itself be a macro expansion expres-
  379. X     sion.  A LINE can be continued over several physical lines
  380. X     by terminating it with a single backslash character.  Com-
  381. X     ments are initiated by the pound '#' character and extend to
  382. X     the end of line.  All comment text is discarded, a '#' may
  383. X     be placed into the makefile text by escaping it with '\'
  384. X     (ie. \# translates to # when it is parsed).  A group of con-
  385. X     tinued lines may be commented out by placing a single # at
  386. X     the start of the first line of the group.  A continued line
  387. X     may not span more than one makefile.
  388. X
  389. X     white space is defined to be any combination of <space>,
  390. X     <tab>, and the sequence \<nl> when \<nl> is used to ter-
  391. X     minate a LINE.  When processing macro definition lines, any
  392. X     amount of white space is allowed on either side of the macro
  393. X     operator (=, *=, :=, *:=, += or +:=), and white space is
  394. X     stripped from both before and after the macro value string.
  395. X     The sequence \<nl> is treated as white space during recipe
  396. X     expansion and is deleted from the final recipe string.  You
  397. X     must escape the \<nl> with a \ in order to get a \ at the
  398. X     end of a recipe line.  The \<nl> sequence is deleted from
  399. X     macro values when they are expanded.
  400. X
  401. X     When processing target definition lines, the recipe for a
  402. X     target must, in general, follow the first definition of the
  403. X     target (See the RULES AND TARGETS section for an exception),
  404. X     and the recipe may not span across multiple makefiles.  Any
  405. X     targets and prerequisites found on a target definition line
  406. X     are taken to be white space separated tokens.  The rule
  407. X     operator (op in SYNTAX section) is also considered to be a
  408. X     token but does not require white space to precede or follow
  409. X     it.  Since the rule operator begins with a `:', traditional
  410. X     versions of make do not allow the `:' character to form a
  411. X     valid target name.  dmake allows `:' to be present in
  412. X     target/prerequisite names as long as the entire
  413. X     target/prerequisite name is quoted.  For example:
  414. X
  415. X          a:fred : test
  416. X
  417. X     would be parsed as TARGET = a, PREREQUISITES are fred, :,
  418. X     and test, which is not what was intended.  To fix this you
  419. X     must write:
  420. X
  421. X          "a:fred" : test
  422. X
  423. X     Which will be parsed as expected.  See the EXAMPLES section
  424. X     for how to apply this to a list of targets.
  425. X
  426. XATTRIBUTES
  427. X     dmake defines several target attributes.  Attributes may be
  428. X     assigned to a single target, a group of targets, or to all
  429. X     targets in the makefile.  Attributes are used to modify
  430. X
  431. X
  432. X
  433. XVersion 3.50                    UW                              8
  434. X
  435. X
  436. X
  437. X
  438. XDMAKE(p)               Unsupported Software               DMAKE(p)
  439. X
  440. X
  441. X
  442. X     dmake actions during target update.  The recognized attri-
  443. X     butes are:
  444. X
  445. X
  446. X     .EPILOG     Insert shell epilog code when executing a group
  447. X                 recipe associated with any target having this
  448. X                 attribute set.
  449. X
  450. X     .IGNORE     Ignore an error when trying to make any target
  451. X                 with this attribute set.
  452. X
  453. X     .LIBRARY    Target is a library.
  454. X
  455. X     .MKSARGS    If in an MSDOS environment then use MKS extended
  456. X                 argument passing conventions to pass arguments
  457. X                 to commands.  Non-MSDOS environments ignore this
  458. X                 attribute.
  459. X
  460. X     .NOINFER    Any target with this attribute set will not be
  461. X                 subjected to transitive closure if it is
  462. X                 inferred as a prerequisite of a target whose
  463. X                 recipe and prerequisites are being inferred.
  464. X                 (i.e. the inference algorithm will not use any
  465. X                 prerequisite with this attribute set, as a tar-
  466. X                 get)
  467. X
  468. X     .PRECIOUS   Do not remove this target under any cir-
  469. X                 cumstances.  Set by default for any targets
  470. X                 whose corresponding files exist in the file sys-
  471. X                 tem prior to the execution of dmake.
  472. X
  473. X     .PROLOG     Insert shell prolog code when executing a group
  474. X                 recipe associated with any target having this
  475. X                 attribute set.
  476. X
  477. X     .SEQUENTIAL Force a sequential make of the associated
  478. X                 target's prerequisites.
  479. X
  480. X     .SETDIR     Change current working directory to specified
  481. X                 directory when making the associated target.
  482. X                 You must specify the directory at the time the
  483. X                 attribute is specified.  To do this simply give
  484. X                 .SETDIR=path as the attribute.  path is expanded
  485. X                 and the result is used as the value of the
  486. X                 directory to change to.  If path is surrounded
  487. X                 by single quotes then path is not expanded, and
  488. X                 is used literally as the directory name.  If the
  489. X                 path contains any `:' characters then the entire
  490. X                 attribute string must be quoted using ".  If a
  491. X                 target having this attribute set also has the
  492. X                 .IGNORE attribute set then if the change to the
  493. X                 specified directory fails it will be ignored,
  494. X
  495. X
  496. X
  497. XVersion 3.50                    UW                              9
  498. X
  499. X
  500. X
  501. X
  502. XDMAKE(p)               Unsupported Software               DMAKE(p)
  503. X
  504. X
  505. X
  506. X                 and no error message will be issued.
  507. X
  508. X     .SILENT     Do not echo the recipe lines when making any
  509. X                 target with this attribute set, and do not issue
  510. X                 any warnings.
  511. X
  512. X     .SWAP       Under MSDOS when making a target with this
  513. X                 attribute set swap the dmake executable to disk
  514. X                 prior to executing the recipe line.
  515. X
  516. X     .SYMBOL     Target is a library member and is an entry point
  517. X                 into a module in the library.  This attribute is
  518. X                 used only when searching a library for a target.
  519. X                 Targets of the form lib((entry)) have this
  520. X                 attribute set automatically.
  521. X
  522. X     .USESHELL   Force each recipe line of a target to be exe-
  523. X                 cuted using a shell.  Specifying this attribute
  524. X                 is equivalent to specifying the '+' character at
  525. X                 the start of each line of a non-group recipe.
  526. X
  527. X     .UPDATEALL  Indicates that all the targets listed in this
  528. X                 rule are updated by the execution of the accom-
  529. X                 panying recipe.  A common example is the produc-
  530. X                 tion of the y.tab.c and y.tab.h files by yacc
  531. X                 when it is run on a grammar.  Specifying
  532. X                 .UPDATEALL in such a rule prevents the running
  533. X                 of yacc twice, once for the y.tab.c file and
  534. X                 once for the y.tab.h file.
  535. X
  536. X
  537. X     All attributes are user setable and except for .UPDATEALL
  538. X     and .MKSARGS may be used in one of two forms.  The .MKSARGS
  539. X     attribute is restricted to use as a global attribute, and
  540. X     the use of the .UPDATEALL attribute is restricted to rules
  541. X     of the second form only.
  542. X
  543. X          ATTRIBUTE_LIST : targets
  544. X
  545. X     assigns the attributes specified by ATTRIBUTE_LIST to each
  546. X     target in targets or
  547. X
  548. X          targets ATTRIBUTE_LIST : ...
  549. X
  550. X     assigns the attributes specified by ATTRIBUTE_LIST to each
  551. X     target in targets. In the first form if targets is empty
  552. X     (ie. a NULL list), then the list of attributes will apply to
  553. X     all targets in the makefile (this is equivalent to the com-
  554. X     mon Make construct of ".IGNORE :" but has been modified to
  555. X     the notion of an attribute instead of a special target).
  556. X     Not all of the attributes have global meaning.  In particu-
  557. X     lar, .LIBRARY, .SYMBOL, and .UPDATEALL have no assigned
  558. X
  559. X
  560. X
  561. XVersion 3.50                    UW                             10
  562. X
  563. X
  564. X
  565. X
  566. XDMAKE(p)               Unsupported Software               DMAKE(p)
  567. X
  568. X
  569. X
  570. X     global meaning.
  571. X
  572. X     Any attribute may be used with any target, even with the
  573. X     special targets.  Some combinations are useless (e.g.
  574. X     .INCLUDE .PRECIOUS: ... ), while others are useful (e.g.
  575. X     .INCLUDE .IGNORE : "file.mk" will not complain if file.mk
  576. X     cannot be found using the include file search rules, see the
  577. X     section on SPECIAL TARGETS for a description of .INCLUDE).
  578. X     If a specified attribute will not be used with the special
  579. X     target a warning is issued and the attribute is ignored.
  580. X
  581. XMACROS
  582. X     dmake supports six types of macro assignment.
  583. X
  584. X
  585. X     MACRO = LINE    This is the most common and familiar form of
  586. X                     macro assignment.  It assigns LINE literally
  587. X                     as the value of MACRO.  Future expansions of
  588. X                     MACRO recursively expand it's value.
  589. X
  590. X     MACRO *= LINE   This form behaves exactly as the simple '='
  591. X                     form with the exception that if MACRO
  592. X                     already has a value then the assignment is
  593. X                     not performed.
  594. X
  595. X     MACRO := LINE   This form differs from the simple '=' form
  596. X                     in that it expands LINE prior to assigning
  597. X                     it as the value of MACRO.  Future expansions
  598. X                     of MACRO do not recursively expand it's
  599. X                     value.
  600. X
  601. X     MACRO *:= LINE  This form behaves exactly as the ':=' form
  602. X                     with the exception that if MACRO already has
  603. X                     a value then the assignment and expansion
  604. X                     are not performed.
  605. X
  606. X     MACRO += LINE   This form of macro assignment allows macro
  607. X                     values to grow.  It takes the literal value
  608. X                     of LINE and appends it to the previous value
  609. X                     of MACRO separating the two by a single
  610. X                     space.  Future expansions of MACRO recur-
  611. X                     sively expand it's value.
  612. X
  613. X     MACRO +:= LINE  This form is similar to the '+=' form except
  614. X                     that the value of LINE is expanded prior to
  615. X                     being added to the value of MACRO.
  616. X
  617. X     Macro expressions specified on the command line allow the
  618. X     macro value to be redefined within the makefile only if the
  619. X     macro is defined using the '+=' and '+:=' operators.  Other
  620. X     operators will define a macro that cannot be further modi-
  621. X     fied.
  622. X
  623. X
  624. X
  625. XVersion 3.50                    UW                             11
  626. X
  627. X
  628. X
  629. X
  630. XDMAKE(p)               Unsupported Software               DMAKE(p)
  631. X
  632. X
  633. X
  634. X     When dmake defines a non-environment macro it strips leading
  635. X     and trailing white space from the macro value.  Macros
  636. X     imported from the environment via either the .IMPORT special
  637. X     target (see the SPECIAL TARGETS section), or the -e, or -E
  638. X     flags are an exception to this rule.  Their values are
  639. X     always taken literally and white space is never stripped.
  640. X     In addition, macros defined using the .IMPORT special target
  641. X     do not have their values expanded when they are used within
  642. X     a makefile.  In contrast, environment macros that are
  643. X     imported due to the specification of the -e or -E flags are
  644. X     subject to expansion when used.
  645. X
  646. X     To specify a macro expansion enclose the name in () or {}
  647. X     and precede it with a dollar sign $.  Thus $(TEST)
  648. X     represents an expansion of the macro variable named TEST.
  649. X     If TEST is defined then $(TEST) is replaced by its expanded
  650. X     value.  If TEST is not defined then $(TEST) expands to the
  651. X     NULL string (this is equivalent to defining a macro as
  652. X     'TEST=' ).  A short form may be used for single character
  653. X     named macros.  In this case the parentheses are optional,
  654. X     and $(I) is equivalent to $I.  Macro expansion is recursive,
  655. X     hence, if the value string contains an expression represent-
  656. X     ing a macro expansion, the expansion is performed.  Circular
  657. X     macro expansions are detected and cause an error to be
  658. X     issued.
  659. X
  660. X     When defining a macro the given macro name is first expanded
  661. X     before being used to define the macro.  Thus it is possible
  662. X     to define macros whose names depend on values of other mac-
  663. X     ros.  For example, suppose
  664. X
  665. X          CWD = $(PWD:b)
  666. X
  667. X     is defined, then the value of $(CWD) is the name of the
  668. X     current directory.  This can be used to define macros
  669. X     specific to this directory, for example:
  670. X
  671. X          _$(CWD).prt = list of files to print...
  672. X
  673. X     The actual name of the defined macro is a function of the
  674. X     current directory.  A construct such as this is useful when
  675. X     processing a hierarchy of directories using .SETDIR attri-
  676. X     buted targets and a collection of small distributed makefile
  677. X     stubs.
  678. X
  679. X     Macro variables may be defined within the makefile, on the
  680. X     command line, or imported from the environment.
  681. X
  682. X     dmake supports several non-standard macro expansions: The
  683. X     first is of the form:
  684. X
  685. X
  686. X
  687. X
  688. X
  689. XVersion 3.50                    UW                             12
  690. X
  691. X
  692. X
  693. X
  694. XDMAKE(p)               Unsupported Software               DMAKE(p)
  695. X
  696. X
  697. X
  698. X          $(macro_name:modifier_list:modifier_list:...)
  699. X
  700. X     where modifier_list is chosen from the set { D or d, F or f,
  701. X     B or b, S or s, T or t } and
  702. X
  703. X          d - directory portion of all path names
  704. X          f - file (including suffix) portion of path names
  705. X          b - file (not including suffix) portion of path names
  706. X          s - simple pattern substitution
  707. X          t - tokenization.
  708. X
  709. X     Thus if we have the example:
  710. X
  711. X          test = d1/d2/d3/a.out f.out d1/k.out
  712. X
  713. X     The following macro expansions produce the values on the
  714. X     right of '-->' after expansion.
  715. X
  716. X          $(test:d)            --> d1/d2/d3/ d1/
  717. X          $(test:b)            --> a f k
  718. X          $(test:f)            --> a.out f.out k.out
  719. X          ${test:db}           --> d1/d2/d3/a f d1/k
  720. X          ${test:s/out/in/:f}  --> a.in f.in k.in
  721. X          $(test:f:t"+")       --> a.out+f.out+k.out
  722. X
  723. X     If a token ends in a string composed from the value of the
  724. X     macro DIRBRKSTR (ie. ends in a directory separator string,
  725. X     e.g. '/' in UNIX) and you use the :d modifier then the
  726. X     expansion returns the directory name less the final direc-
  727. X     tory separator string.  Thus successive pairs of :d modif-
  728. X     iers each remove a level of directory in the token string.
  729. X
  730. X     The tokenization modifier takes all white space separated
  731. X     tokens from the macro value and separates them by the quoted
  732. X     separator string.  The separator string may contain the fol-
  733. X     lowing escape codes \a => <bel>, \b => <backspace>, \f =>
  734. X     <formfeed>, \n => <nl>, \r => <cr>, \t => <tab>, \v =>
  735. X     <vertical tab>, \" => ", and \xxx => <xxx> where xxx is the
  736. X     octal representation of a character.  Thus the expansion:
  737. X
  738. X          $(test:f:t"+\n")
  739. X     produces:
  740. X          a.out+
  741. X          f.out+
  742. X          k.out
  743. X
  744. X     The second non-standard form of macro expansion allows for
  745. X     recursive macros.  It is possible to specify a $(macro_name)
  746. X     or ${macro_name} expansion where macro_name contains more $(
  747. X     ... ) or ${ ... } macro expansions itself.
  748. X
  749. X
  750. X
  751. X
  752. X
  753. XVersion 3.50                    UW                             13
  754. X
  755. X
  756. X
  757. X
  758. XDMAKE(p)               Unsupported Software               DMAKE(p)
  759. X
  760. X
  761. X
  762. X     For example $(CC$(_HOST)$(_COMPILER)) will first expand
  763. X     CC$(_HOST)$(_COMPILER) to get a result and use that result
  764. X     as the name of the macro to expand.  This is useful for
  765. X     writing a makefile for more than one target environment.  As
  766. X     an example consider the following hypothetical case. Suppose
  767. X     that _HOST and _COMPILER are imported from the environment
  768. X     and are set to represent the host machine type and the host
  769. X     compiler respectively.
  770. X
  771. X          CFLAGS_VAX_CC = -c -O    # _HOST == "_VAX", _COMPILER == "_CC"
  772. X          CFLAGS_PC_MSC = -c -ML   # _HOST == "_PC",  _COMPILER == "_MSC"
  773. X
  774. X          # redefine CFLAGS macro as:
  775. X
  776. X          CFLAGS := $(CFLAGS$(_HOST)$(_COMPILER))
  777. X
  778. X     This causes CFLAGS to take on a value that corresponds to
  779. X     the environment in which the make is being invoked.
  780. X
  781. X     The final non-standard macro expansion is of the form:
  782. X
  783. X          string1{token_list}string2
  784. X
  785. X     where string1, string2 and token_list are expanded.  After
  786. X     expansion, string1 is prepended to each token found in
  787. X     token_list and string2 is appended to each resulting token
  788. X     from the previous prepend.  string1 and string2 are not del-
  789. X     imited by white space whereas the tokens in token_list are.
  790. X     A null token in the token list is specified using "".  Thus
  791. X     using another example we have:
  792. X
  793. X          test/{f1 f2}.o            --> test/f1.o test/f2.o
  794. X          test/ {f1 f2}.o           --> test/ f1.o f2.o
  795. X          test/{f1 f2} .o           --> test/f1 test/f2 .o
  796. X          test/{ f1  "f2" "" }.o    --> test/f1.o test/f2.o
  797. X                                    test/.o
  798. X
  799. X          and
  800. X
  801. X          test/{ d1 d2 }/{ f1 f2 }.o --> test/d1/f1.o
  802. X                                         test/d1/f2.o
  803. X                                         test/d2/f1.o
  804. X                                         test/d2/f2.o
  805. X
  806. X     See the SPECIAL MACROS section for a description of the spe-
  807. X     cial macros that dmake defines and understands.
  808. X
  809. XRULES AND TARGETS
  810. X     A makefile contains a series of entries that specify depen-
  811. X     dencies.  Such entries are called target/prerequisite or
  812. X     rule definitions.  Each rule definition is optionally fol-
  813. X     lowed by a set of lines that provide a recipe for updating
  814. X
  815. X
  816. X
  817. XVersion 3.50                    UW                             14
  818. X
  819. X
  820. X
  821. X
  822. XDMAKE(p)               Unsupported Software               DMAKE(p)
  823. X
  824. X
  825. X
  826. X     any targets defined by the rule.  Whenever dmake attempts to
  827. X     bring a target up to date and an explicit recipe is provided
  828. X     with a rule defining the target, that recipe is used to
  829. X     update the target.  A rule definition begins with a line
  830. X     having the following syntax:
  831. X
  832. X          <targets> [<attributes>] <ruleop> [<prerequisites>] [;<recipe>]
  833. X
  834. X     targets is a non-empty list of targets.  If the target is a
  835. X     special target (see SPECIAL TARGETS section below) then it
  836. X     must appear alone on the rule line.  For example:
  837. X
  838. X          .IMPORT .ERROR : ...
  839. X
  840. X     is not allowed since both .IMPORT and .ERROR are special
  841. X     targets.  Special targets are not used in the construction
  842. X     of the dependency graph and will not be made.
  843. X
  844. X     attributes is a possibly empty list of attributes.  Any
  845. X     attribute defined in the ATTRIBUTES section above may be
  846. X     specified.  All attributes will be applied to the list of
  847. X     named targets in the rule definition.  No other targets will
  848. X     be affected.
  849. X
  850. X
  851. X     NOTE:   As stated earlier, if both the target list and
  852. X             prerequisite list are empty but the attributes list
  853. X             is not, then the specified attributes affect all
  854. X             targets in the makefile.
  855. X
  856. X
  857. X     ruleop is a separator which is used to identify the targets
  858. X     from the prerequisites.  Optionally it also provides a
  859. X     facility for modifying the way in which dmake handles the
  860. X     making of the associated targets.  In its simplest form the
  861. X     operator is a single ':', and need not be separated by white
  862. X     space from its neighbouring tokens.  It may additionally be
  863. X     followed by any of the modifiers { !, ^, -, : }, where:
  864. X
  865. X
  866. X     !    says execute the recipe for the associated targets once
  867. X          for each out of date prerequisite.  Ordinarily the
  868. X          recipe is executed once for all out of date prere-
  869. X          quisites at the same time.
  870. X
  871. X     ^    says to insert the specified prerequisites, if any,
  872. X          before any other prerequisites already associated with
  873. X          the specified targets.  In general, it is not useful to
  874. X          specify ^ with an empty list of prerequisites.
  875. X
  876. X     -    says to clear the previous list of prerequisites before
  877. X          adding the new prerequisites.  Thus,
  878. X
  879. X
  880. X
  881. XVersion 3.50                    UW                             15
  882. X
  883. X
  884. X
  885. X
  886. XDMAKE(p)               Unsupported Software               DMAKE(p)
  887. X
  888. X
  889. X
  890. X               .SUFFIXES :
  891. X               .SUFFIXES : .a .b
  892. X
  893. X          can be replaced by
  894. X
  895. X               .SUFFIXES :- .a .b
  896. X
  897. X          however the old form still works as expected.  NOTE:
  898. X          .SUFFIXES is ignored by dmake it is used here simply as
  899. X          an example.
  900. X
  901. X     :    When the rule operator is not modified by a second ':'
  902. X          only one set of rules may be specified for making a
  903. X          target.  Multiple definitions may be used to add to the
  904. X          list of prerequisites that a target depends on.  How-
  905. X          ever, if a target is multiply defined only one defini-
  906. X          tion may specify a recipe for making the target.
  907. X
  908. X          When a target's rule operator is modified by a second
  909. X          ':' (:: for example) then this definition may not be
  910. X          the only definition with a recipe for the target.
  911. X          There may be other :: target definition lines that
  912. X          specify a different set of prerequisites with a dif-
  913. X          ferent recipe for updating the target. Any such target
  914. X          is made if any of the definitions find it to be out of
  915. X          date with respect to the related prerequisites and the
  916. X          corresponding recipe is used to update the target.
  917. X
  918. X          In the following simple example, each rule has a `::'
  919. X          ruleop.  In such an operator we call the first `:' the
  920. X          operator, and the second `:' the modifier.
  921. X
  922. X          a.o :: a.c b.h
  923. X             first recipe for making a.o
  924. X
  925. X          a.o :: a.y b.h
  926. X             second recipe for making a.o
  927. X
  928. X          If a.o is found to be out of date with respect to a.c
  929. X          then the first recipe is used to make a.o.  If it is
  930. X          found out of date with respect to a.y then the second
  931. X          recipe is used.  If a.o is out of date with respect to
  932. X          b.h then both recipes are invoked to make a.o.  In the
  933. X          last case the order of invocation corresponds to the
  934. X          order in which the rule definitions appear in the
  935. X          makefile.
  936. X
  937. X     Targets defined using a single `:' operator with a recipe
  938. X     may be redefined again with a new recipe by using a `:'
  939. X     operator with a `:' modifier.  This is equivalent to a tar-
  940. X     get having been initially defined with a rule using a `:'
  941. X     modifier.  Once a target is defined using a `:' modifier it
  942. X
  943. X
  944. X
  945. XVersion 3.50                    UW                             16
  946. X
  947. X
  948. X
  949. X
  950. XDMAKE(p)               Unsupported Software               DMAKE(p)
  951. X
  952. X
  953. X
  954. X     may not be defined again with a recipe using only the `:'
  955. X     operator with no `:' modifier.  In both cases the use of a
  956. X     `:' modifier creates a new list of prerequisites and makes
  957. X     it the current prerequisite list for the target.  The `:'
  958. X     operator with no recipe always modifies the current list of
  959. X     prerequisites.  Thus assuming each of the following defini-
  960. X     tions has a recipe attached, then:
  961. X
  962. X          joe :  fred ...     (1)
  963. X          joe :: more ...     (2)
  964. X
  965. X          and
  966. X
  967. X          joe :: fred ...     (3)
  968. X          joe :: more ...     (4)
  969. X
  970. X     are legal and mean:  add the recipe associated with (2), or
  971. X     (4) to the set of recipes for joe, placing them after exist-
  972. X     ing recipes for making joe.  The constructs:
  973. X
  974. X          joe :: fred ...     (5)
  975. X          joe : more ... (6)
  976. X
  977. X          and
  978. X
  979. X          joe : fred ... (7)
  980. X          joe : more ... (8)
  981. X
  982. X     are errors since we have two sets of perfectly good recipes
  983. X     for making the target.
  984. X
  985. X     prerequisites is a possibly empty list of targets that must
  986. X     be brought up to date before making the current target.
  987. X
  988. X     recipe is a short form and allows the user to specify short
  989. X     rule definitions on a single line.  It is taken to be the
  990. X     first recipe line in a larger recipe if additional lines
  991. X     follow the rule definition.  If the semi-colon is present
  992. X     but the recipe line is empty (ie. null string) then it is
  993. X     taken to be an empty rule.  Any target so defined causes the
  994. X     Don't know how to make ... error message to be suppressed
  995. X     when dmake tries to make the target and fails.  This silence
  996. X     is maintained for rules that are terminated by a semicolon
  997. X     and have no following recipe lines, for targets listed on
  998. X     the command line, and for the first target found in the
  999. X     makefile.
  1000. X
  1001. XRECIPES
  1002. X     The traditional format used by most versions of Make defines
  1003. X     the recipe lines as arbitrary strings that may contain macro
  1004. X     expansions.  They follow a rule definition line and may be
  1005. X     spaced apart by comment or blank lines.  The list of recipe
  1006. X
  1007. X
  1008. X
  1009. XVersion 3.50                    UW                             17
  1010. X
  1011. X
  1012. X
  1013. X
  1014. XDMAKE(p)               Unsupported Software               DMAKE(p)
  1015. X
  1016. X
  1017. X
  1018. X     lines defining the recipe is terminated by a new target
  1019. X     definition, a macro definition, or end-of-file.  Each recipe
  1020. X     line MUST begin with a <TAB> character which may optionally
  1021. X     be followed with one or all of the characters '@%+-'.  The
  1022. X     '-' indicates that non-zero exit values (ie. errors) are to
  1023. X     be ignored when this recipe line is executed, the '+' indi-
  1024. X     cates that the current recipe line is to be executed using
  1025. X     the shell, the '%' indicates that dmake should swap itself
  1026. X     out to secondary storage (MSDOS only) before running the
  1027. X     recipe and the '@' indicates that the recipe line should NOT
  1028. X     be echoed to the terminal prior to being executed.  Each
  1029. X     switch is off by default (ie. by default, errors are signi-
  1030. X     ficant, commands are echoed, no swapping is done and a shell
  1031. X     is used only if the recipe line contains a character found
  1032. X     in the value of the SHELLMETAS macro).  Global settings
  1033. X     activated via command line options or special attribute or
  1034. X     target names may also affect these settings.  An example
  1035. X     recipe:
  1036. X
  1037. X          target :
  1038. X               first recipe line
  1039. X               second recipe line, executed independently of the first.
  1040. X               @a recipe line that is not echoed
  1041. X               -and one that has errors ignored
  1042. X               %and one that causes dmake to swap out
  1043. X               +and one that is executed using a shell.
  1044. X
  1045. X     The second and new format of the recipe block begins the
  1046. X     block with the character '[' (the open group character) in
  1047. X     the last non-white space position of a line, and terminates
  1048. X     the block with the character ']' (the close group character)
  1049. X     in the first non-white space position of a line.  In this
  1050. X     form each recipe line need not have a leading TAB.  This is
  1051. X     called a recipe group.  Groups so defined are fed intact as
  1052. X     a single unit to a shell for execution whenever the
  1053. X     corresponding target needs to be updated.  If the open group
  1054. X     character '[' is preceded by one or all of -, @ or % then
  1055. X     they apply to the entire group in the same way that they
  1056. X     apply to single recipe lines.  You may also specify '+' but
  1057. SHAR_EOF
  1058. echo "End of part 16"
  1059. echo "File man/dmake.nc is continued in part 17"
  1060. echo "17" > s2_seq_.tmp
  1061. exit 0
  1062.  
  1063.